# -*- coding: utf-8 -*-

# src/widgets/TabWidget/QETabWidget.py

# 引入QtCore, QtWidgets
from PyQt5 import QtCore, QtWidgets

# 自定义横向TabBar，继承QTabBar
class HorizontalTabBar(QtWidgets.QTabBar):

    # 重写paintEvent
    def paintEvent(self, event):
        # 重写绘制事件
        painter = QtWidgets.QStylePainter(self)

        # 获取Qt tab的绘制样式
        option = QtWidgets.QStyleOptionTab()

        # 遍历tabBar中的项
        for index in range(self.count()):

            # 初始化当前索引下tab页的样式
            self.initStyleOption(option, index)

            # 绘制tab页的Control页面，并初始化其样式
            painter.drawControl(QtWidgets.QStyle.CE_TabBarTabShape, option)

            # 绘制tab页的文字标签，并初始化其样式
            # QtCore.Qt.AlignCenter 文字居中，
            # QtCore.Qt.TextDontClip 文字不超出tab页
            painter.drawText(self.tabRect(index),
                             QtCore.Qt.AlignCenter | QtCore.Qt.TextDontClip,
                             self.tabText(index))

    # 重写tabSizeHint
    def tabSizeHint(self, index):
        # 获取tabBar中tab的默认大小
        size = QtWidgets.QTabBar.tabSizeHint(self, index)
        # 如果tab的宽度小于高度，则交换tab的宽度和高度
        if size.width() < size.height():
            size.transpose()
        return size

# 继承QTabWidget
class QETabWidget(QtWidgets.QTabWidget):
    # 初始化
    def __init__(self, parent=None):
        QtWidgets.QTabWidget.__init__(self, parent)
        # 设置tabBar为自定义的横向TabBar
        self.setTabBar(HorizontalTabBar())